package cn.lhl.flowable.task;

import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;

/**
 * <completionCondition>${compCondition.getComCondition(execution)}</completionCondition>
 * 会签完成 通过java判断  流程引擎完全基于配置
 */
@Component("compCondition")
public class CompCondition {
    //    多实例活动在所有实例都完成时结束。
    //    然而，也可以指定一个表达式（或类的方法），在每个实例结束时进行计算。
    //注意:   当表达式计算为true时，将销毁所有剩余的实例，并结束多实例活动，继续执行流程。
    //    这个表达式必须通过completionCondition子元素定义。
    public boolean getComCondition(DelegateExecution execution) {
        //三个内置参数
        Object nrOfInstances = execution.getVariable("nrOfInstances");//实例总数
        Object nrOfActiveInstances = execution.getVariable("nrOfActiveInstances");//未完成的实例
        Object nrOfCompletedInstances = execution.getVariable("nrOfCompletedInstances");//已完成实例
        System.out.println("总实例数量" + Integer.parseInt(nrOfCompletedInstances.toString()));
        System.out.println("未完成的实例" + Integer.parseInt(nrOfActiveInstances.toString()));
        System.out.println("已完成实例" + Integer.parseInt(nrOfCompletedInstances.toString()));
        if (Float.parseFloat(nrOfCompletedInstances.toString()) / Float.parseFloat(nrOfInstances.toString()) > 0.5) {
            System.out.println("达到完成条件 nrOfCompletedInstances/ nrOfInstances> 0.5");
            return true;//如果完成的比例高于50%就返回ture,代表会签结束，没有完成的任务就自动结束了
        } else {
            System.out.println("***未达到完成条件 nrOfCompletedInstances/ nrOfInstances =" +Float.parseFloat(nrOfCompletedInstances.toString()) / Float.parseFloat(nrOfInstances.toString()));
            return false;//如果完成的比例不高于50%就返回false,还需要继续会签
        }
    }

}
